import java.util.*;
/**
 * Write a description of class WinkelenMenu here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class WinkelenMenu
{
    // instance variables - replace the example below with your own
    private MenuKiezer menu;
    private Supermarkt supermarkt;
    private Klant klant;
    private TuiHelper tuiHelper;
    
    /**
     * Constructor for objects of class WinkelenMenu
     */
    public WinkelenMenu(Supermarkt supermarkt, Klant klant){
        this.supermarkt=supermarkt;
        this.klant=klant;
        toonWinkelenMenu();
    }
    
    public void toonWinkelenMenu() {
        menu = new MenuKiezer( "Welke afdeling wilt u?", "maak een keuze" );
        menu.addItem( "Zoek op product" );
        toonAfdelingen();
        menu.addStopItem("Terug");
    }
    
    public void toonAfdelingen(){
        ArrayList<Afdeling> afdelingen = new ArrayList<Afdeling>();
        afdelingen = supermarkt.getAfdelingen();
        if (afdelingen.size() != 0){
            for (Afdeling afdeling : supermarkt.getAfdelingen()){
                if ( !afdeling.getAfdelingNaam().equalsIgnoreCase("magazijn") ){
                    menu.addItem(afdeling.getAfdelingNaam() );
                }
            }
        }else{
            System.out.println("leeg");
        }
    }
    
    public void toonAfdelingmenu() {
        int keuze = -1;
        TuiHelper.clear();
        while ( keuze != 0 ) {
            keuze = menu.getMenukeuze();
            if (keuze == 1){
                zoekOpProduct();
            }
            else{
                if ( keuze <  supermarkt.getAfdelingen().size()+2 && keuze > 0){
                    toonProductenAfdeling(supermarkt.getAfdelingen().get(keuze-2));
                }
            }
        }
        TuiHelper.clear();
    }
    
    public void toonProductenAfdeling( Afdeling afdeling){
       AfdelingMenu afdelingMenu = new AfdelingMenu(afdeling, supermarkt, klant);
       afdelingMenu.toonProductenMenu();
    }
    
    public void zoekOpProduct(){
        int i = 1;
        TuiHelper.clear();
        ArrayList<Product> gevondenProducten = new ArrayList<Product>();
        ArrayList<String> productnamen = new ArrayList<String>();
        String naam1 = TuiHelper.stelVraagMetTekstAntwoord( "Vul de productnaam in: " );
        Product gezochteProduct = null;
            for( Product product : supermarkt.getProducten()  ){
                if(product.getNaam().toLowerCase().contains(naam1.toLowerCase() ) && product.getVoorraadAfdeling() >0 ) {
                    gevondenProducten.add(product);
                }            
            }
            sorteerProduct(gevondenProducten);
            for(Product p : gevondenProducten){
                if( !productnamen.contains( p.getNaam() ) ){
                    System.out.println( i + ". " + p.toString(0) );
                    i++;
                    productnamen.add( p.getNaam() );
                }
            }
        int keuze = tuiHelper.stelVraagMetGetalAntwoord( "Welk product wilt u? \n druk '0' om terug te keren" );        
        if ( keuze <= gevondenProducten.size() && keuze > 0 ){
            gezochteProduct = gevondenProducten.get(keuze-1);
            String naam = gezochteProduct.getNaam();
            int aantal = tuiHelper.stelVraagMetGetalAntwoord( "Hoeveel wilt u er ?" );
                if(!klant.zitProductAlInWinkelwagen( naam )){
                    klant.addWinkelwagenProduct(gezochteProduct);
                    supermarkt.minVoorraadAfdeling(gezochteProduct, aantal, gezochteProduct.getHoudbaarheidsDatum());
                    supermarkt.plusAantal(gezochteProduct, aantal);
                }
                else{
                    supermarkt.minVoorraadAfdeling(gezochteProduct, aantal, gezochteProduct.getHoudbaarheidsDatum());
                    supermarkt.plusAantal(gezochteProduct, aantal);
                }
                System.out.println("gelukt");
                TuiHelper.drukafDrukEnterEnWachtOpEnter();
            }
        else if (keuze == 0 ){            
            TuiHelper.drukafDrukEnterEnWachtOpEnter(); 
        }
    }
    
    private void sorteerProduct(ArrayList<Product> producten) {
        int j;
        boolean flag = true;  // will determine when the sort is finished
        Product temp;
        while ( flag ){
            flag = false;
            for ( j = 0;  j < producten.size() - 1;  j++ ){
                if ( producten.get( j ).getNaam().compareToIgnoreCase(producten.get( j+1 ).getNaam() ) > 0 ){                                             
                    // ascending sort
                    temp = producten.get(j);
                    producten.set(j, producten.get( j+1) );     // swapping
                    producten.set(j+1,  temp);
                    flag = true;
                }
            }
        }
    } 
    
}
